'''
Author: duliang thinktanker@163.com
Date: 2025-07-10 19:37:16
LastEditors: duliang thinktanker@163.com
LastEditTime: 2025-07-11 19:27:25
FilePath: 
Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
'''
from pyzbar import pyzbar
from PIL import Image
import cv2
from pdf2image import convert_from_path  # 新增：用于将PDF转换为图像


def decode_qr_code(image_path):
    # 方法1：使用Pillow读取图像
    image = Image.open(image_path)
    qr_codes = pyzbar.decode(image)

    # 方法2（备选）：使用OpenCV读取（适合需要预处理的情况）
    # image_cv = cv2.imread(image_path)
    # qr_codes = pyzbar.decode(image_cv)

    # 解析结果
    results = []
    for qr in qr_codes:
        data = qr.data.decode("utf-8")  # 解码为字符串
        qr_type = qr.type  # 二维码类型（如QRCODE）
        results.append({"data": data, "type": qr_type})

    return results


def decode_qr_from_pdf(pdf_path):
    """
    从PDF文件中解码二维码
    :param pdf_path: PDF 文件路径
    :return: 二维码内容列表
    """
    images = convert_from_path(pdf_path)
    all_results = []

    for image in images:
        qr_codes = pyzbar.decode(image)
        for qr in qr_codes:
            data = qr.data.decode("utf-8")
            qr_type = qr.type
            all_results.append({"data": data, "type": qr_type})

    return all_results


# 使用示例
if __name__ == "__main__":
    image_path = r"2025-07-10 200347.jpg"  # 替换为你的发票图片路径

    # 识别图片中的二维码（如果需要）
    qr_info = decode_qr_code(image_path)

    # 识别PDF中的二维码
    # qr_info = decode_qr_from_pdf(pdf_path)

    if qr_info:
        print("识别成功！找到 {} 个二维码：".format(len(qr_info)))
        print(qr_info)
        for i, info in enumerate(qr_info):
            print(f"二维码 {i+1}:")
            print(f"  类型: {info['type']}")
            print(f"  内容: {info['data']}")
    else:
        print("未识别到二维码")
